package com.wasin.server.util;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.diboot.core.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @ 作者： wasin
 * @ 创建时间： 2021/9/18  10:13
 * @ 说明：    验证码工具类
 * @ 当前版本:  1.0.0
 */
@Component
public class CaptchaUtils {

    @Autowired
    RedisUtil redisUtil;

    /**
     * 生成验证码并保存到redis
     * @param tokenId redis唯一key
     * @param time 验证码有效时间
     * @return
     */
    public LineCaptcha getCaptCha(String tokenId,long time) {
        //定义图形验证码的长和宽
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(126, 30,4,150);
        //把凭证对应的验证码信息保存到redis（可从redis中获取）
        redisUtil.set(tokenId,lineCaptcha.getCode(),time);
        return lineCaptcha;
    }

    /**
     * 校验验证码是否正确
     * @param captcha 验证码 redis 中 key
     * @param code 验证码
     * @return
     */
    public Boolean verifyCaptcha(String captcha,String code){
        if(StringUtils.isNotBlank(captcha)){
            Object redisCaptcha = redisUtil.get(captcha);
            if(redisCaptcha==null){
                throw new BusinessException("验证码失效，请重新生成验证码");
            }else {
                if(!code.equals(redisCaptcha.toString())){
                    throw new BusinessException("验证码错误");
                }
            }
        }else {
            throw new BusinessException("请求错误，请重新生成验证码");
        }
        return Boolean.TRUE;
    }


}
